<?php

declare(strict_types=1);

namespace App\Constants;

use Hyperf\Constants\AbstractConstants;
use Hyperf\Constants\Annotation\Constants;

#[Constants]
class ResponseCode extends AbstractConstants
{
    /**
     * 默认成功
     * @Message("constant.response_code.success_default")
     */
    public const SUCCESS_DEFAULT = 200;

    /**
     * 请求出错
     * @Message("constant.response_code.http_bad_request")
     */
    public const HTTP_BAD_REQUEST = 400;

    /**
     * 认证失败
     * @Message("constant.response_code.http_unauthorized")
     */
    public const HTTP_UNAUTHORIZED = 401;

    /**
     * 没有权限
     * @Message("constant.response_code.http_forbidden")
     */
    public const HTTP_FORBIDDEN = 403;

    /**
     * 路由错误
     * @Message("constant.response_code.http_not_found")
     */
    public const HTTP_NOT_FOUND = 404;

    /**
     * 不允许的方法
     * @Message("constant.response_code.http_method_not_allowed")
     */
    public const HTTP_METHOD_NOT_ALLOWED = 405;

    /**
     * 不接受的类型
     * @Message("constant.response_code.http_not_acceptable")
     */
    public const HTTP_NOT_ACCEPTABLE = 406;

    /**
     * 不支持的媒体类型
     * @Message("constant.response_code.http_unsupported_media_type")
     */
    public const HTTP_UNSUPPORTED_MEDIA_TYPE = 415;

    /**
     * 范围不满足
     * @Message("constant.response_code.http_range_not_satisfiable")
     */
    public const HTTP_RANGE_NOT_SATISFIABLE = 416;

    /**
     * 不可处理实体
     * @Message("constant.response_code.http_unprocessable_entity")
     */
    public const HTTP_UNPROCESSABLE_ENTITY = 422;

    /**
     * 服务器错误
     * @Message("constant.response_code.http_server_error")
     */
    public const HTTP_SERVER_ERROR = 500;

    /*
    |------------------------------------------------------------------
    | 自定义错误码
    |-------------------------------------------------------------------
    |
    | 没有特殊情况直接使用默认code，然后自定义消息，例如：
    |    throw new BusinessException(ErrCode::ERROR_DEFAULT, '您有一个自定义错误消息')
    | 如果需要前端单独处理时，再按顺序增加自定义错误码。
    | 自定义错误码常量以ERROR_开头，不能重复。
    |
    */

    /**
     * 正常状态异常代码
     * @Message("constant.response_code.error_default")
     */
    public const ERROR_DEFAULT = 510;

    /**
     * 验证失败
     * @Message("constant.response_code.error_validation_failed")
     */
    public const ERROR_VALIDATION_FAILED = 511;

    /**
     * 数据不存在
     * @Message("constant.response_code.error_data_not_found")
     */
    public const ERROR_DATA_NOT_FOUND = 512;
}
